/**
 * @file contests/cf1702/e/main.cpp
 * @brief
 * @see
 * @author Ruiming Guo (guoruiming@stu.scu.edu.cn)
 * @copyright 2022
 * @date 2022/7/10 22:02:57
 **/

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 7;
ll n, k, c, a[N], col[N];
pair<ll, ll> p[N];
string s;
vector<ll> adj[N];
bool ok = true;
// 二分图染色
void dfs(ll u) {
  for (auto v : adj[u])
    if (!col[v])
      col[v] = 3 - col[u], dfs(v);
    else if (col[v] == col[u])
      ok = false;
}

bool solve() {
  cin >> n;
  for (int i = 1; i <= n; ++i) col[i] = a[i] = 0, adj[i].clear();
  ok = true;
  for (int i = 1; i <= n; ++i) {
    cin >> p[i].first >> p[i].second;
    a[p[i].first]++;
    a[p[i].second]++;
  }
  for (int i = 1; i <= n; ++i)
    // 1) 每个数字必须出现 2 次
    // 如果有一个数字 d_i 出现了少于 2 次，必然有数字 d_j 出现多于 2 次
    // 必然会有两个 d_j 出现在同一侧
    // 2) 同一张牌上出现相同的数字更不可能满足题意
    if (a[i] != 2 || p[i].first == p[i].second) {
      return false;
    }
  for (int i = 1; i <= n; ++i) {
    adj[p[i].first].push_back(p[i].second);
    adj[p[i].second].push_back(p[i].first);
  }
  for (int i = 1; i <= n; ++i) {
    if (!col[i]) {
      col[i] = 1;
      dfs(i);
    }
  }
  return ok;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr), cout.tie(nullptr);
  int tc;
  cin >> tc;
  while (tc--) {
    cout << (solve() ? "YES\n" : "NO\n");
  }
}
